Skip to content

1、概念

只要有两个以上的 goroutine 并发访问同一变量,且至少其中的一个是写操作的时候就会发生数据竞争;全是读的情况下是不存在数据竞争的。

2、排查方式

package main

import "fmt"

func main() {
  i := 0

  go func() {
     i++; // write i
  }()

  fmt.Println(i) // read i
}

go 命令行有个参数 race 可以帮助检测代码中的数据竞争

$ go run -race main.go

WARNING: DATA RACE
Write at 0x00c0000ba008 by goroutine 7:
exit status 66

木川工作室 (微信:mcmc2024)